
<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta charset="utf-8" />
  <title>CheckTypeSize &mdash; CMake 3.16.5 Documentation</title>

    <link rel="stylesheet" href="../_static/cmake.css" type="text/css" />
    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
    
    <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
    <script type="text/javascript" src="../_static/jquery.js"></script>
    <script type="text/javascript" src="../_static/underscore.js"></script>
    <script type="text/javascript" src="../_static/doctools.js"></script>
    <script type="text/javascript" src="../_static/language_data.js"></script>
    
    <link rel="shortcut icon" href="../_static/cmake-favicon.ico"/>
    <link rel="index" title="Index" href="../genindex.html" />
    <link rel="search" title="Search" href="../search.html" />
    <link rel="next" title="CheckVariableExists" href="CheckVariableExists.html" />
    <link rel="prev" title="CheckSymbolExists" href="CheckSymbolExists.html" />
  
 

  </head><body>
    <div class="related" role="navigation" aria-label="related navigation">
      <h3>Navigation</h3>
      <ul>
        <li class="right" style="margin-right: 10px">
          <a href="../genindex.html" title="General Index"
             accesskey="I">index</a></li>
        <li class="right" >
          <a href="CheckVariableExists.html" title="CheckVariableExists"
             accesskey="N">next</a> |</li>
        <li class="right" >
          <a href="CheckSymbolExists.html" title="CheckSymbolExists"
             accesskey="P">previous</a> |</li>
  <li>
    <img src="../_static/cmake-logo-16.png" alt=""
         style="vertical-align: middle; margin-top: -2px" />
  </li>
  <li>
    <a href="https://cmake.org/">CMake</a> &#187;
  </li>
  <li>
    <a href="../index.html">3.16.5 Documentation</a> &#187;
  </li>

          <li class="nav-item nav-item-1"><a href="../manual/cmake-modules.7.html" accesskey="U">cmake-modules(7)</a> &#187;</li> 
      </ul>
    </div>  

    <div class="document">
      <div class="documentwrapper">
        <div class="bodywrapper">
          <div class="body" role="main">
            
  <div class="section" id="checktypesize">
<span id="module:CheckTypeSize"></span><h1>CheckTypeSize<a class="headerlink" href="#checktypesize" title="Permalink to this headline">¶</a></h1>
<p>Check sizeof a type</p>
<dl class="command">
<dt id="command:check_type_size">
<code class="sig-name descname">CHECK_TYPE_SIZE</code><a class="headerlink" href="#command:check_type_size" title="Permalink to this definition">¶</a></dt>
<dd><div class="highlight-cmake notranslate"><div class="highlight"><pre><span></span><span class="nf">CHECK_TYPE_SIZE(</span><span class="no">TYPE</span><span class="w"> </span><span class="no">VARIABLE</span><span class="w"> </span><span class="p">[</span><span class="no">BUILTIN_TYPES_ONLY</span><span class="p">]</span><span class="w"></span>
<span class="w">                              </span><span class="p">[</span><span class="no">LANGUAGE</span><span class="w"> </span><span class="nv">&lt;language&gt;</span><span class="p">]</span><span class="nf">)</span><span class="w"></span>
</pre></div>
</div>
<p>Check if the type exists and determine its size.  On return,
<code class="docutils literal notranslate"><span class="pre">HAVE_${VARIABLE}</span></code> holds the existence of the type, and <code class="docutils literal notranslate"><span class="pre">${VARIABLE}</span></code>
holds one of the following:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>&lt;size&gt; = type has non-zero size &lt;size&gt;
&quot;0&quot;    = type has arch-dependent size (see below)
&quot;&quot;     = type does not exist
</pre></div>
</div>
<p>Both <code class="docutils literal notranslate"><span class="pre">HAVE_${VARIABLE}</span></code> and <code class="docutils literal notranslate"><span class="pre">${VARIABLE}</span></code> will be created as internal
cache variables.</p>
<p>Furthermore, the variable <code class="docutils literal notranslate"><span class="pre">${VARIABLE}_CODE</span></code> holds C preprocessor code
to define the macro <code class="docutils literal notranslate"><span class="pre">${VARIABLE}</span></code> to the size of the type, or leave
the macro undefined if the type does not exist.</p>
<p>The variable <code class="docutils literal notranslate"><span class="pre">${VARIABLE}</span></code> may be <code class="docutils literal notranslate"><span class="pre">0</span></code> when
<span class="target" id="index-0-variable:CMAKE_OSX_ARCHITECTURES"></span><a class="reference internal" href="../variable/CMAKE_OSX_ARCHITECTURES.html#variable:CMAKE_OSX_ARCHITECTURES" title="CMAKE_OSX_ARCHITECTURES"><code class="xref cmake cmake-variable docutils literal notranslate"><span class="pre">CMAKE_OSX_ARCHITECTURES</span></code></a> has multiple architectures for building
OS X universal binaries.  This indicates that the type size varies across
architectures.  In this case <code class="docutils literal notranslate"><span class="pre">${VARIABLE}_CODE</span></code> contains C preprocessor
tests mapping from each architecture macro to the corresponding type size.
The list of architecture macros is stored in <code class="docutils literal notranslate"><span class="pre">${VARIABLE}_KEYS</span></code>, and the
value for each key is stored in <code class="docutils literal notranslate"><span class="pre">${VARIABLE}-${KEY}</span></code>.</p>
<p>If the <code class="docutils literal notranslate"><span class="pre">BUILTIN_TYPES_ONLY</span></code> option is not given, the macro checks for
headers <code class="docutils literal notranslate"><span class="pre">&lt;sys/types.h&gt;</span></code>, <code class="docutils literal notranslate"><span class="pre">&lt;stdint.h&gt;</span></code>, and <code class="docutils literal notranslate"><span class="pre">&lt;stddef.h&gt;</span></code>, and saves
results in <code class="docutils literal notranslate"><span class="pre">HAVE_SYS_TYPES_H</span></code>, <code class="docutils literal notranslate"><span class="pre">HAVE_STDINT_H</span></code>, and <code class="docutils literal notranslate"><span class="pre">HAVE_STDDEF_H</span></code>.
The type size check automatically includes the available headers, thus
supporting checks of types defined in the headers.</p>
<p>If <code class="docutils literal notranslate"><span class="pre">LANGUAGE</span></code> is set, the specified compiler will be used to perform the
check. Acceptable values are <code class="docutils literal notranslate"><span class="pre">C</span></code> and <code class="docutils literal notranslate"><span class="pre">CXX</span></code>.</p>
</dd></dl>

<p>Despite the name of the macro you may use it to check the size of more
complex expressions, too.  To check e.g.  for the size of a struct
member you can do something like this:</p>
<div class="highlight-cmake notranslate"><div class="highlight"><pre><span></span><span class="nf">check_type_size(</span><span class="s">&quot;((struct something*)0)-&gt;member&quot;</span><span class="w"> </span><span class="no">SIZEOF_MEMBER</span><span class="nf">)</span><span class="w"></span>
</pre></div>
</div>
<p>The following variables may be set before calling this macro to modify
the way the check is run:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>CMAKE_REQUIRED_FLAGS = string of compile command line flags
CMAKE_REQUIRED_DEFINITIONS = list of macros to define (-DFOO=bar)
CMAKE_REQUIRED_INCLUDES = list of include directories
CMAKE_REQUIRED_LINK_OPTIONS  = list of options to pass to link command
CMAKE_REQUIRED_LIBRARIES = list of libraries to link
CMAKE_REQUIRED_QUIET = execute quietly without messages
CMAKE_EXTRA_INCLUDE_FILES = list of extra headers to include
</pre></div>
</div>
</div>


          </div>
        </div>
      </div>
      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
        <div class="sphinxsidebarwrapper">
  <h4>Previous topic</h4>
  <p class="topless"><a href="CheckSymbolExists.html"
                        title="previous chapter">CheckSymbolExists</a></p>
  <h4>Next topic</h4>
  <p class="topless"><a href="CheckVariableExists.html"
                        title="next chapter">CheckVariableExists</a></p>
  <div role="note" aria-label="source link">
    <h3>This Page</h3>
    <ul class="this-page-menu">
      <li><a href="../_sources/module/CheckTypeSize.rst.txt"
            rel="nofollow">Show Source</a></li>
    </ul>
   </div>
<div id="searchbox" style="display: none" role="search">
  <h3 id="searchlabel">Quick search</h3>
    <div class="searchformwrapper">
    <form class="search" action="../search.html" method="get">
      <input type="text" name="q" aria-labelledby="searchlabel" />
      <input type="submit" value="Go" />
    </form>
    </div>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
        </div>
      </div>
      <div class="clearer"></div>
    </div>
    <div class="related" role="navigation" aria-label="related navigation">
      <h3>Navigation</h3>
      <ul>
        <li class="right" style="margin-right: 10px">
          <a href="../genindex.html" title="General Index"
             >index</a></li>
        <li class="right" >
          <a href="CheckVariableExists.html" title="CheckVariableExists"
             >next</a> |</li>
        <li class="right" >
          <a href="CheckSymbolExists.html" title="CheckSymbolExists"
             >previous</a> |</li>
  <li>
    <img src="../_static/cmake-logo-16.png" alt=""
         style="vertical-align: middle; margin-top: -2px" />
  </li>
  <li>
    <a href="https://cmake.org/">CMake</a> &#187;
  </li>
  <li>
    <a href="../index.html">3.16.5 Documentation</a> &#187;
  </li>

          <li class="nav-item nav-item-1"><a href="../manual/cmake-modules.7.html" >cmake-modules(7)</a> &#187;</li> 
      </ul>
    </div>
    <div class="footer" role="contentinfo">
        &#169; Copyright 2000-2019 Kitware, Inc. and Contributors.
      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 2.1.2.
    </div>
  </body>
</html>